Tile function _2
Instead of the 10 types of tile formats described above, the byte value could be _2.
This function is used to load 1 to 15 16x16 tiles that has or have already been identified.
Any value from 0 to 15 (0 to F) could be in _, where that value is the number of tiles to use again.
EXAMPLE: OCTOLOT |
 | This is Octolot's mold data. |
 |
This is a _2 function used to "duplicate" a tile.
- Since it is 12, it will only read one tile.
- The 0xEB and 0xEE are the Y and X coordinate values to add to the original Y and X coordinate values.
- The 0x00C4 is to be added to the mold pointer (0x26EBC5 in this case for Octolot, like 0x26CF6E for Goomba).
|
 |
Add the short to the mold pointer...
- 0x26EBC5 + 0x00C4 = 0x26EC89
- A0 F4 04 0C 13 will be used once more, except with different coordinates.
- The original coordinates were F4 and 04
- The new coordinates will be F4 + EB = DF (the sum must be ONLY 1 byte) and 04 + EE = F2.
- Therefore the new Y and X coords will be DF and F2.
So concluding from this, there are two 16x16 tiles that are the same, but at different coordinates.
If the function were 22 instead of 12, then it would also read the next 16x16 tile which is F0 FA F3 20 15 25 26 tile and add the coordinates to that one also. (FA + EB and F3 + EE). |
In the ROM, only 12 and 22 are ever used, but when editing it yourself, any value from 0 to 15 is possible.

These are the 16x16 tiles. The bright green represents the completely transparent area, so as to allow overlap (explained later). The function byte, byte 1, tells what 8x8 tiles are to be transparent. See doc_sprite-gfx.txt for details. |
80 10 13 15
 |
C0 10 03 13 14
 |
A0 00 13 03 0B
 |
F0 00 03 01 02 09 0A
 |
Here is the arrangement of the 16x16 tiles into the shield. The individual coordinates of each 16x16 tile allows them to be freely arranged anywhere on the object plane (which spans about 80% of the entire screen). Only preceding tiles can always overlap each other (ie. 16x16 tiles always and only overlap ones after them in the data block at $26CFF1).
Overlaps are used for practical reasons, such as Cloaker's shield being the first in the data block. It is in front of his body and overlaps all.
The coordinates of the bottom-right portion of the shield are 19 by 16, or the corresponding hex values 0x10 and 0x13, respectively. The bottom-left portion is just 3 pixels to the right of the dead center of the object plane and 16 pixels down from it, etc. etc...
|

(left) Here is a piecing together of the Cloaker sprite in the sequential order of all 22 tiles.
(right) This is the complete span of the object's maximum coordinates, 256 x 256.
The upper-left and upper-right quadrants are for negative Y coordinates which use values 0x80 and above.
The upper-left and lower-left quadrants are for negative X coordinates which use values 0x80 and above.
The point where the lines cross is the dead center: here the shield can be approximated at about 0,0. The exact coordinates of the shield are 3,0.
|
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ANIMATION
Cloaker uses 5 animation sequences
STEP 2: calculate mold pointer address
 |
[(byte 3,4) x 3] + $252000 = mold pointer address
[$005C x 3] + $252000 = $252114 |
STEP 3: determine mold/sequence data addresses from mold pointer
 |
mold pointer + 2 = mold data
$26CF6E(PC address) + 2 = $26CF70 |
STEP 4: determine animation sequence address from byte 1,2
 |
(byte 1,2) + mold pointer = animation sequence pointers address
$000C + $26CF6E = $26CF7A |
STEP 5: determine sequence data address from byte
 |
Cloaker has 5 sequence assignments (2 bytes each), as seen in the selection
(byte 1,2) + mold pointer = sequence data
$0018 + $26CF6E = $26CF86
|
STEP 6: sequence data

(mold byte x 2) + $26CFCD = tile-shifting data pointer
($0F x 2) + $26CFCD = $26CFEB

$038B + $26CF6E = $26D2F9
|
every 2 bytes is a frame
byte 1 = frame delay
byte 2 = sprite mold to use for frame
06 = delay 6 frames
00 = use mold 1
08 = delay 8 frames
0F = use mold 16
06 = delay 6 frames
00 = use mold 1
08 = delay 8 frames
10 = use mold 17
00 = END SEQUENCE
|
STEP 7: tile shifting animation mold

|
42 = upper bits: move 4 tiles together (lower bits: shift function)
FF 00 = Y shift, X shift (FF = up 1 pixel, 00 = no X shift)
83 00 = pointer: modify tiles at 0x83 bytes after $26CF6E ***
22 = upper bits: move 2 tiles together
00 00 = Y shift, X shift
98 00 = pointer
etc...
00 = END DATA
*** the ENTIRE mold for the frame (the whole sprite) must be set, which is the reason for some of the 0,0 shifts. These aren't modified, but they still must be identified or they will not appear.
|
ANIMATION (more...)
Cloaker's 4th animation sequence
choose frame
 |
The frame which uses the mold that modifies the eyebrows along with other body parts is at $26CFA3: 04 07.
04 is the frame delay, and 07 is the mold.
|
find pointer to mold address
 |
($07 x 2) + $26CFCD = $26CFDB
$01EE + $26CF6E = $26D15C
|
find tiles for eyebrows
 |
42
04 FC
83 00 = the shield
12
03 FD
98 00 = the arm holding the shield
12
01 00
9E 00 = the feather
12
07 F9
37 01 = top left corner of mustache and eyebrow
12
FE 01
A4 00 = bottom right corner of mustache
22
07 F9
40 01 = most of mustache and eyebrows
22
02 FE
B9 00 = the beard
62
00 00 = no shift!
C5 00 = the body and hat
42
FA 06
EC 00 = the arm holding the sword
00
The eyebrows are modified at $26D176.
22 = move 2 tiles together
07 F9 = Y shift, X shift
40 01 = pointer
$0140 + $26CF6E = $26D0AE
|
 |
The two selections are the two tiles used. Parts of these tiles were not used in the previous frames: the streched eyebrows are new.
However, any tiles can be used, new or old. The animation in step 3 reloads the entire mold in pieces so that each piece can be modified or not modified separately. |
    
    
 
This type of animation is a kind of 'piecing' animation which takes groups of 16x16 tiles that can be considered a 'piece' (like the whole shield, which is four 16x16 tiles) and moves it as one.
This gives the objects a puppet-like orientation of segmented joints and appendages. |